
struct ListNode
{
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};

class Solution
{
public:
    int kthToLast(ListNode *head, int k)
    {
        // 可以使用双指针的方法进行求解，让块指针先走k个节点；
        // 之后再同时走，这样当快指针为空时，也就找到了第k个节点
        ListNode *right = head, *left = head;
        int cnt{};
        while (right)
        {
            if (cnt != k)
            {
                cnt++;
                right = right->next;
                continue;
            }
            right = right->next;
            left = left->next;
        }

        return left->val;
    }
};